#include <iostream>
#include <set>
using std::set;

int main() {
  // 初始化
  set<int> s1;             // 空集合
  set<int> s2 = {1, 2, 3}; // 初始化列表
  set<int> s3(s2);         // 拷贝构造

  // 插入元素
  s1.insert(4);         // 插入单个元素
  s1.insert({5, 6, 7}); // 插入多个元素
  s1.emplace(8);        // 原地构造元素

  s1.insert(5);
  s1.insert(5);
  s1.insert(5);
  s1.insert(5);
  std::cout << "\n";
  for (int x : s1) {
    std::cout << x << " ";
  }
  std::cout << "\n";
  std::cout << "\n";
  // 判断元素是否存在
  if (s1.find(5) != s1.end()) {
    std::cout << "元素 5 存在\n";
  }

  // 使用 count 检查存在性(返回 0 或 1)
  if (s1.count(5)) {
    std::cout << "元素 5 存在\n";
  }

  // 删除元素
  s1.erase(5);          // 删除值为 5 的元素
  s1.erase(s1.begin()); // 删除第一个元素(最小值)
  s1.clear();           // 清空集合

  // 获取容量
  bool isEmpty = s1.empty();
  size_t size = s1.size();

  // 遍历容器
  for (int num : s2) {
    std::cout << num << " ";
  }
  std::cout << "\n";

  for (auto it = s2.begin(); it != s2.end(); ++it) {
    std::cout << *it << " ";
  }
  std::cout << "\n";

  // 获取某个元素的位置 使用迭代器
  auto it = s2.find(2);
  if (it != s2.end()) {
    std::cout << "找到元素: " << *it << "\n";
  }

  return 0;
}